在本文中,我將分享如何在不重新啟動應用程式的情況下更改應用程式的日誌等級。
日誌等級通常被認為是按重要性排序:在開發中開啟「不重要」等級(通知、偵錯等),但在開發中僅啟用「最重要」等級(警告、錯誤等)。生產環境,CPU 時間和磁碟空間等資源非常寶貴。
但是,如果您的應用程式在 ERROR 等級並且開始面臨許多問題,但您無法從 ERROR 等級日誌中找出答案,那麼透過重新部署應用程式來變更日誌等級將花費大量時間和資源。
此外,在生產中以 INFO 或 DEBUG 等級運行應用程式將產生大量日誌,這些日誌可能會壓垮日誌系統,導致 I/O 操作和資源消耗增加。
為了解決這些問題,GoFr - 終極 Golang 框架提供了一種安全的方法來更改日誌級別,而無需重新啟動應用程式。
要更改日誌級別,任何 GoFr 應用程式都需要以下配置:
REMOTE_LOG_URL=(e.g., https://log-service.com/log-levels?id=1)
GoFr 預設每 15 秒獲取一次提供的端點以獲取最新的日誌級別,可以透過新增以下配置來增加或減少此間隔。
REMOTE_LOG_FETCH_INTERVAL=(default: 15)
GoFr 要求 URL 的回應採用以下格式,並附有兩個必填欄位:
{ "data": { "serviceName": "test-service", "logLevel": "DEBUG" } }
讓我們建立日誌等級服務,它將為我們的應用程式提供日誌等級。
我將使用 GoFr 建立服務,請參閱文件以了解更多資訊。
我們將使用 MySQL 作為資料庫,若要新增 MySQL,請在 configs 目錄中的 .env 檔案中新增下列設定。
DB_HOST=localhost DB_USER=root DB_PASSWORD=password DB_NAME=log-level DB_PORT=2001 DB_DIALECT=mysql
要執行 MySQL docker 容器,請執行下列指令
docker run --name gofr-logger -e MYSQL_ROOT_PASSWORD=password -e MYSQL_DATABASE=log-level -p 2001:3306 -d mysql:8.0.30
讓我們新增帶有遷移的 main.go 檔案來建立表,我們將使用 AddRESTHandler 功能來註冊路由。
main.go
package main import ( "gofr.dev/pkg/gofr" "gofr.dev/pkg/gofr/migration" ) const createTable = `CREATE TABLE level ( id INT PRIMARY KEY, service_name VARCHAR(255) NOT NULL, log_level VARCHAR(50) NOT NULL ); ` func createTableLevel() migration.Migrate { return migration.Migrate{ UP: func(d migration.Datasource) error { _, err := d.SQL.Exec(createTable) if err != nil { return err } return nil }, } } type Level struct { ID int `json:"id"` ServiceName string `json:"serviceName"` LogLevel string `json:"logLevel"` } func (u *Level) RestPath() string { return "level" } func main() { app := gofr.New() app.Migrate(map[int64]migration.Migrate{1: createTableLevel()}) err := app.AddRESTHandlers(&Level{}) if err != nil { app.Logger().Fatalf("Failed to register routes for level struct: %v", err) } app.Run() }
運行日誌服務後我們會看到以下日誌:
我們已註冊所有 REST 路線。
要建立服務,請發送以下請求:
curl --location 'localhost:8000/level' \ --header 'Content-Type: application/json' \ --data '{ "id":1, "logLevel":"INFO", "serviceName":"gofr-app" }'
要更新日誌級別,請發送以下請求:
curl --location --request PUT 'localhost:8000/level/1' \ --header 'Content-Type: application/json' \ --data '{ "id":1, "logLevel":"DEBUG", "serviceName":"gofr-app" }'
要取得日誌級別,請發送以下請求:
curl --location 'localhost:8000/level/1'
相同的 URL 將用於我們的應用程式的配置中,其日誌等級必須遠端變更。
透過使用 GoFr 遠端日誌等級變更功能,您將獲得以下好處:
輕鬆調整:
隨時修改日誌級別,無需重新啟動應用程式。這在故障排除期間特別有用。
增強可見度:
輕鬆切換到更詳細的日誌等級(例如 DEBUG)以更深入地了解特定問題,然後切換回不太詳細的等級(例如 INFO)以進行常規操作。
改進的性能:
產生大量日誌會使日誌系統不堪重負,導致 I/O 操作和資源消耗增加,更改為警告或錯誤等級可減少日誌數量,增強效能,並降低雲端成本。
透過給予 ⭐star 支持 GoFr: https://github.com/gofr-dev/gofr
此外,您可以訪問免費公共端點來匯出和查看應用程式的追蹤@tracer.gofr.dev。
要啟用它,請在您的 .env 檔案中新增以下配置
TRACE_EXPORTER=gofr
其他福利:
如果您在開發或撰寫文章方面為 GOFR 做出了貢獻。您可以透過填寫 GitHub 上的表格來獲得免費的 贈品(T 卹、貼紙) 自述文件(位於底部)。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3